﻿using System;

namespace NeroConnect.Network
{
    class HttpListenerContext : IListenerContext
    {
        private HttpListener _listener;
        private MiniHttpServer.IHttpContext _listenerContext;
        private HttpListenerRequest _request;
        private HttpListenerResponse _response;

        public HttpListenerContext(HttpListener listener, MiniHttpServer.IHttpContext httpListenerContext)
        {
            if (httpListenerContext == null)
                throw new ArgumentNullException("httpListenerContext");

            _listener = listener;
            _listenerContext = httpListenerContext;
        }

        public void Dispose()
        {
            Close();
        }


        public IListenerRequest Request
        {
            get
            {
                if (_request == null)
                    _request = new HttpListenerRequest(this, _listenerContext.Request);
                return _request;
            }
        }

        public IListenerResponse Response
        {
            get
            {
                if (_response == null)
                    _response = new HttpListenerResponse(this, _listenerContext.Response);
                return _response;
            }
        }

        public void Close()
        {
            _request.Dispose();
            _response.Dispose();
            _listenerContext.Dispose();
        }
     }
 
    //class HttpListenerContext : IListenerContext
    //{
    //    private System.Net.HttpListenerContext _listenerContext;
    //    private HttpListenerRequest _request;
    //    private HttpListenerResponse _response;

    //    public HttpListenerContext(System.Net.HttpListenerContext httpListenerContext)
    //    {
    //        if (httpListenerContext == null)
    //            throw new ArgumentNullException("httpListenerContext");

    //        _listenerContext = httpListenerContext;
    //    }

    //    public IListenerRequest Request
    //    {
    //        get
    //        {
    //            if (_request == null)
    //                _request = new HttpListenerRequest(_listenerContext.Request);
    //            return _request;
    //        }
    //    }

    //    public IListenerResponse Response
    //    {
    //        get
    //        {
    //            if (_response == null)
    //                _response = new HttpListenerResponse(_listenerContext.Response);
    //            return _response;
    //        }
    //    }

    //    public void Dispose()
    //    {
    //        if (_response != null)
    //            _response.Dispose();
    //    }
    //}
}
